// 题意：给定n(n <= 300)个点，求一个半径为1的圆最多能覆盖多少点。
//
// 题解：O(n^3)的做法就是枚举两点（覆盖最多点的圆肯定可以有两个点在边界上），
//       然后O(n)求个数。
//       good。然后比较厉害的是这个O(n^2*log(n))的做法，对于每个点，O(n)
//       求出其他所有和它距离小于等于2的点在与它相交部分的圆弧（在枚举点上）。
//       保存圆弧按极角序，然后按极角序排序。在枚举，遇到起点+1, 终点-1,
//       不断更新答案，然后 答案+1 的最大值就是结果。
//
// 统计：844ms, 34min, 1A
//
// run: $exec < input
// std: c++03
#include <iostream>
#include <algorithm>
#include <cmath>
#include <utility>
#include <vector>

typedef std::pair<double, double> point_type;
typedef std::pair<double, double> arc_type;

int const maxn = 303;
point_type point[maxn];
std::pair<double, int> arc[4*maxn]; // polar angle and tag(for start or end)

int n, ans;

double sqr(double x) { return x * x; }
double get_dis(point_type const & a, point_type const & b)
{
	return std::sqrt(sqr(a.first - b.first) + sqr(a.second - b.second));
}

arc_type get_arc_intersection(point_type const & a, point_type const & b)
{
	double base = std::atan2((a.second - b.second), (a.first - b.first));
	double delta = std::acos(get_dis(a, b)/2.0);
	return arc_type(base - delta, base + delta);
}

int main()
{
	std::ios::sync_with_stdio(false);
	while (std::cin >> n && n) {
		ans = 0;
		for (int i = 0; i < n; i++)
			std::cin >> point[i].first >> point[i].second;

		for (int i = 0; i < n; i++) {
			int tot = 0;
			for (int j = 0; j < n; j++) {
				if (j == i || get_dis(point[i], point[j]) > 2) continue;
				arc_type tmp = get_arc_intersection(point[i], point[j]);
				arc[tot].first = tmp.first; arc[tot++].second = 1;
				arc[tot].first = tmp.second; arc[tot++].second = -1;
			}
			std::sort(arc, arc + tot);

			for (int j = 0, count = 0; j < tot; j++) {
				count += arc[j].second;
				ans = std::max(ans, count);
			}
		}
		std::cout << ans + 1 << '\n';
	}
}

